Verilog 除法器设计

您所在的位置:网站首页 verilog 除法运算 Verilog 除法器设计

Verilog 除法器设计

2023-06-21 23:13| 来源: 网络整理| 查看: 265

除法器原理(定点)

和十进制除法类似,计算 27 除以 5 的过程如下所示:

除法运算过程如下:

取被除数的高几位数据,位宽和除数相同(实例中是 3bit 数据)。 将被除数高位数据与除数作比较,如果前者不小于后者,则可得到对应位的商为 1,两者做差得到第一步的余数;否则得到对应的商为 0,将前者直接作为余数。 将上一步中的余数与被除数剩余最高位 1bit 数据拼接成新的数据,然后再和除数做比较。可以得到新的商和余数。  重复过程3,直到被除数最低位数据也参与计算。

需要说明的是,商的位宽应该与被除数保持一致,因为除数有可能为1。所以上述手动计算除法的实例中,第一步做比较时,应该取数字 27 最高位 1 (​3'b001​) 与 ​3'b101​ 做比较。 根据此计算过程,设计位宽可配置的流水线式除法器,流水延迟周期个数与被除数位宽一致。

除法器设计 单步运算设计

单步除法计算时,单步被除数位宽(信号 ​dividend​)需比原始除数(信号 ​divisor​)位宽多 1bit 才不至于溢出。

为了便于流水,输出端需要有寄存器来存储原始的除数(信号 ​divisor ​和 ​divisor_kp​)和被除数信息(信号 ​dividend_ci ​和 ​dividend_kp​)。

单步的运算结果就是得到新的 1bit 商数据(信号 ​merchant​)和余数(信号 ​remainder​)。

为了得到最后的除法结果,新的 1bit 商数据(信号 ​merchant​)还需要与上一周期的商结果(​merchant_ci​)进行移位累加。

单步运算单元设计如下(文件名 divider_cell.v):

// parameter M means the actual width of divisor module divider_cell #(parameter N=5, parameter M=3) ( input clk, input rstn, input en, input [M:0] dividend, input [M-1:0] divisor, input [N-M:0] merchant_ci , //上一级输出的商 input [N-M-1:0] dividend_ci , //原始除数 output reg [N-M-1:0] dividend_kp, //原始被除数信息 output reg [M-1:0] divisor_kp, //原始除数信息 output reg rdy , output reg [N-M:0] merchant , //运算单元输出商 output reg [M-1:0] remainder //运算单元输出余数 ); always @(posedge clk or negedge rstn) begin if (!rstn) begin rdy


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3